/*
    Kelompok    2
    Kelas       2
    Anggota :
    1. Yudha Wastu Prawira      / 13509002
    2. Robertus Theodore        / 13509008
    3. Rendy Bambang Junior     / 13509036
    4. Hartono Sulaiman Wijaya  / 13509046
    5. Daniel Prihartoni        / 13509088
    6. Raydhitya Yosep          / 13509092

*/

#ifndef _FARM_H
#define _FARM_H

#include "Resource.h"
#include "Constant.h"
#include "Plant.h"

typedef struct
{
	bool plantable;
	Plant * plant;
	bool plowed;
	bool watered;
	bool accessible;
} FarmElem;
typedef vector< vector <FarmElem> > FarmPlan;

class Farm
{
	public :
		//ctor
		Farm();
		//dtor
		~Farm();

		//inisialisasi untuk awal game
		void initialize();
		void initialize(SaveInfo);

		//mengubah atribut kebun ketika pemain tidur (ganti hari)
		void nextDay();

		//setter
		//mengubah koordinat tersebut menjadi tercangkul
		void setPlowed(Point);
		//mengubah koordinat tersebut menjadi tersiram
		void setWatered(Point);
		//menanam tanaman dengan tipe plantType di koordinat tersebut
		void setPlanted(Point, SeedType);
		//mengubah koordinat tersebut menjadi kosong
		void setEmpty(Point);
		//menyabit tanaman di koordinat tersebut
		void setSlashed(Point);
		//mengatur atribut tanaman dikoordinat tersebut menjadi 'terpanen', lalu return tipe buahnya
		void setHarvested(Point); //return MELON_FRUIT_CODE, CARROT_FRUIT_CODE, or else. see Constant.h
		//mendapatkan tipe buah yang dihasilkan dari tanaman di depan
		FruitType getFruitType(Point);

		//getter
		//mengembalikan atribut dari farm
		bool isEmpty(Point);
		bool isPlowed(Point);
		bool isPlowable(Point);
		bool isPlantable(Point);
		bool isWaterable(Point);
		bool isSlashable(Point);
		bool isHarvestable(Point);
		bool isDeadPlant(Point);
		FarmPlan getFarmPlan();
		void getSaveInfo(SaveInfo&);

	private:
		//titik penjualan
		Point sellingPoint;
		//titik keluar masuk pemain
		Point portalPoint;
		//kebun dan isinya
		FarmPlan farmPlan;
};
#endif
